package com.example.demo.util;

import java.io.InputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.util.IOUtils;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

// 假设的员工类
class Employee {
    String name;
    String position;
    String photoPath;

    // 构造函数和其他方法（如果需要）
    public Employee(String name, String position, String photoPath) {
        this.name = name;
        this.position = position;
        this.photoPath = photoPath;
    }
}

class EmployeeExcelExporter {

    public static void main(String[] args) {
        // 创建员工列表（示例数据）
        List<Employee> employees = new ArrayList<>();
        employees.add(new Employee("Alice", "Manager", "image/image.png"));
        employees.add(new Employee("Bob", "Developer", "image/image.png"));
        // 添加更多员工...

        // 创建一个新的工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();

        // 创建一个新的工作表
        XSSFSheet sheet = workbook.createSheet("Employees");

        // 创建表头
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("Name");
        headerRow.createCell(1).setCellValue("Position");
        headerRow.createCell(2).setCellValue("Photo");

        // 填充员工数据
        int rowIndex = 1;
        for (Employee employee : employees) {
            Row row = sheet.createRow(rowIndex++);

            row.createCell(0).setCellValue(employee.name);
            row.createCell(1).setCellValue(employee.position);

            // 插入图片
            try {
                Resource resource = new ClassPathResource(employee.photoPath);
                InputStream inputStream = resource.getInputStream();
                byte[] bytes = IOUtils.toByteArray(inputStream);
                int pictureIdx = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);

                // 创建绘图对象
                XSSFDrawing drawing = sheet.createDrawingPatriarch();

                // 创建锚点，定义图片在工作表中的位置
                CreationHelper helper = workbook.getCreationHelper();
                ClientAnchor anchor = helper.createClientAnchor();
                anchor.setCol1(2); // 图片开始列（C列）
                anchor.setRow1(rowIndex - 1); // 图片开始行（与数据行对应）

                // 注意：这里没有设置col2和row2，它们通常用于定义图片的大小。
                // 如果需要调整图片大小，可以手动设置anchor的dx和dy属性（以EMU为单位），
                // 或者根据图片的实际尺寸和所需的显示尺寸进行计算。

                // 插入图片
                drawing.createPicture(anchor, pictureIdx);

                // 可选：调整图片所在的单元格宽度和高度（这里只是示例，可能需要根据实际情况调整）
                // sheet.setColumnWidth(2, 5000); // 设置C列宽度
                // row.setHeightInPoints((float) 100); // 设置行高（可能不起作用，因为图片可能不受行高限制）

                // 注意：调整图片大小和位置通常需要使用更复杂的逻辑，
                // 例如根据图片的原始尺寸和单元格的尺寸来计算dx和dy。
            } catch (IOException e) {
                e.printStackTrace();
                // 可以选择跳过有问题的图片或记录错误
            }
        }

        // 自动调整列宽（可选，但可能不适用于包含图片的列）
//        for (int i = 0; i < 2; i++) { // 假设我们调整前两列，因为第三列包含图片
//            sheet.autoSizeColumn(i);
//        }

        // 写入文件
        try (FileOutputStream fileOut = new FileOutputStream("EmployeesWithPhotos.xlsx")) {
            workbook.write(fileOut);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                workbook.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}